當我們在瀏覽器中瀏覽網站時,是否曾想過為什麼可以保持登錄狀態,並在不同頁面之間傳遞資料?這一切都歸功於 Laravel HTTP Session 的魔力!
Laravel 的 HTTP Session 是一種幫助我們在多次請求之間保存使用者資訊的工具。由於 HTTP 是一種「無狀態」的協議,每次請求都是孤立的,因此需要 Session 來記住使用者的狀態,比如登入資訊或購物車內容。
那 HTTP Session 有哪些用途呢?
那使用 HTTP Session 有什麼好處跟危險的地方勒~
想像一下,作為客戶端的我們在網頁上點來點去,發出請求。然而,HTTP 是「無狀態」的,每次請求都不會記住之前的狀況。
摁!可以把 HTTP 想成是一個有短期記憶喪失的人,當你不在他面前時,他就會忘記你和之前的對話。
由於 HTTP 無狀態,伺服器就作為資料存儲的地方,使用「Session」來存放臨時資料。在每次登入時,伺服器會生成一個 session ID,並透過 cookie 傳回。這個 cookie 就像一張通行證,記錄一些資訊。
session 是一個用來儲存個人資料的結構,它的有效期限不長,專門針對獨立用戶。所以如果用不同的設備登入同一個網站,這些設備就會有各自的 session ID。這樣伺服器就能管理這些資料。
當用戶不再使用網站一段時間後,Session 會自動過期,以提高安全性。若不這樣做,黑客可能會利用你的 session ID 來冒充你發出請求,這將帶來潛在風險。
伺服器將 session ID 發給你,你再把它帶回去,伺服器就能根據這個 ID 找出你的資料。這種做法在購物網站的購物車功能上非常常見,伺服器可以用 Session 來保存你的暫時選擇,這樣我們就不用每次都要重新登錄。
在登出時,必須在客戶端和伺服器兩邊都終止 Session,以防被他人劫持。如果 Session 沒有過期,則存在被盜的風險。因此,無論是對於用戶還是開發者,管理好 Session 都是至關重要的。
我們可以想像 Session 像是一個短期的記憶體,專門存放用戶的活動信息;
而 Cookie 則是用戶瀏覽器裡的長期備忘錄。
--- | Session | Cookies |
---|---|---|
存儲地點 | 存放在 「伺服器」 的臨時記憶體,為每個用戶保留信息。 | 存放在用戶 「瀏覽器」 中的小便條,帶有用戶信息,每次用戶訪問網站時都會帶過來。 |
存在時間 | 僅在用戶瀏覽器開啟時有效,關閉後即消失,像短暫會議。 | 可以設定保存較久,甚至在關閉瀏覽器後也會保留,像長期備忘錄。 |
安全性 | 資料在伺服器上,相對安全,但仍需防範不速之客。 | 因為在用戶瀏覽器中,可能被他人偷窺,敏感資料不建議放在這裡。 |
資料容量 | 可以存儲大量資料,沒有大小限制。 | 每個 Cookie 通常限制在 4096 字節,存儲量有限。 |
存放內容 | 使用者登入狀態 / 購物車內容 / 表單數據 / 臨時設置 | 用戶偏好(如主題顏色)/ 記住我功能(自動登入) / 訪問計數器 / 廣告個性化 |
參考資料
踏著身心靈的塔羅腳步,轉向技術與邏輯的工程師之路,就藉由塔羅日抽來紀錄今日的學習與生活吧!
寶劍七:寶劍七的巧妙與 Session 的運用有相似之處。Session 能夠保持用戶的登入狀態,但若管理不當,則可能導致安全漏洞或用戶資料洩漏,最終損害系統的完整性。這正體現了寶劍七所展現的投機取巧的風險:在追求短期利益時,必須警惕長期後果。
"Everyone falls down. Getting back up is how you learn how to walk."
每個人都有跌倒的時候,但重新站起來的過程,就是學會走路的旅程。
-- Walt Disney